package com.caocaog.market.service;

import com.caocaog.market.entity.GoodsAttr;
import com.caocaog.market.vo.GoodsAttributeVo;
import org.jeecg.common.system.base.service.GenericService;
import org.springframework.validation.annotation.Validated;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.List;

/**
 * 商品属性
 *
 * @author chechen
 * @date 2022-04-12
 */
@Validated
public interface GoodsAttrService extends GenericService<GoodsAttr> {

    /**
     * TODO 重写
     */
    List<GoodsAttributeVo> getGoodsAttrVOByGoodsId(@NotNull String goodsId);

    /**
     * 根据id获取商品属性
     *
     * @param id 商品属性id
     * @return 商品属性信息
     */
    GoodsAttr getGoodsAttr(@NotNull String id);

    /**
     * 根据商品id获取商品属性集合（缓存）
     *
     * @param goodsId 商品id
     * @return 商品属性集合
     */
    List<GoodsAttr> getGoodsAttrByGoodsId(@NotNull String goodsId);

    /**
     * 新增商品属性（缓存）
     *
     * @param goodsAttr 商品属性信息
     * @return 商品属性信息
     */
    GoodsAttr insertGoodsAttr(@NotNull @Valid GoodsAttr goodsAttr);

    /**
     * 更新商品属性（缓存）
     *
     * @param goodsAttr 商品属性信息
     * @return 更新后的实体
     */
    GoodsAttr updateGoodsAttr(@NotNull @Valid GoodsAttr goodsAttr);

    /**
     * 批量插入商品属性（缓存）
     *
     * @param goodsAttrs 商品属性集合
     * @return 受影响行数
     */
    int insertBatchGoodsAttr(@NotNull @Size(min = 1) @Valid List<GoodsAttr> goodsAttrs);

    /**
     * 批量更新商品属性（缓存）
     *
     * @param goodsAttrs 商品属性集合
     * @return 受影响行数
     */
    int updateBatchGoodsAttr(@NotNull @Size(min = 1) @Valid List<GoodsAttr> goodsAttrs);

    /**
     * 删除商品属性（缓存）
     *
     * @param goodsId 商品id
     * @return 受影响行数
     */
    int deleteGoodsAttrByGoodsId(@NotNull String goodsId);

    /**
     * 根据商品ids获取商品属性ids
     *
     * @param goodsIds 商品ids
     * @return 商品属性ids
     * @see #selectListByFieldCache
     */
    String[] getGoodsAttrIdsByGoodsIds(@NotNull @Size(min = 1) String... goodsIds);

}
